import request from '@/utils/request'
import { encrypt } from '@/utils/auth'

/**
 * 通过token获取用户信息
 * 
 * 不需要传入参数，但是请求头要携带token
 * 
 * 成功返回token拥有者的信息
 * 
 * @returns {promises} token拥有者的信息
 */
export function getUserInfoByToken () {
  return request({
    url: '/user/getUserInfoByToken',
    method: 'get',
  })
}
/**
 * 修改用户头像
 * 
 * 传入用户id和头像url封装成的对象
 * 
 * 返回成功失败提示
 * 
 * @param {object} data - 用户id和头像url封装成的对象
 * @param {string} data.id - 用户id
 * @param {string} data.avatar - 头像url
 * @returns {promises} 成功或失败提示
 */
export function updateUserAvatar (data) {
  return request({
    url: '/user',
    method: 'put',
    data: {
      id: data.id,
      avatar: data.avatar
    }
  })
}
/**
 * 修改用户密码
 * 
 * 传入用户id和新密码以及旧密码封装成的对象
 * 
 * 返回成功失败提示
 * 
 * @param {object} data - 用户id和头像url封装成的对象
 * @param {string} data.id - 用户id
 * @param {string} data.oldPassword - 旧密码
 * @param {string} data.newPassword - 新密码
 * @returns {promises} 成功或失败提示
 */
export function updateUserPassword (data) {
  return request({
    url: '/user',
    method: 'put',
    data: {
      id: data.id,
      oldPassword: encrypt(data.oldPassword, data.publicKey),
      newPassword: encrypt(data.newPassword, data.publicKey),
      confirmPassword: encrypt(data.confirmPassword, data.publicKey),
    }
  })
}
/**
 * 修改用户昵称
 * 
 * 传入用户id和新昵称封装成的对象
 * 
 * 返回成功失败提示
 * 
 * @param {object} data - 用户id和新昵称封装成的对象
 * @param {string} data.id - 用户id
 * @param {string} data.nickname - 新昵称
 * @returns {promises} 成功或失败提示
 */
export function updateUserNickname (data) {
  return request({
    url: '/user',
    method: 'put',
    data: {
      id: data.id,
      nickname: data.nickname
    }
  })
}
/**
 * 分页查询用户
 * 
 * 封装必选的分页参数和可选的查询参数为一个对象传入
 * 
 * 分页参数：页码号、页大小，页码号小于1从1开始
 * 
 * 查询参数：用户头像、用户昵称、用户名称、状态
 * 
 * 返回结果为分页用户对象
 * 
 * @param {object} data - 封装好的对象
 * @param {string} data.pageNum - 页码号
 * @param {string} data.pageSize - 页大小
 * @param {string} data.avatar - 用户头像
 * @param {string} data.nickname - 用户昵称
 * @param {string} data.username - 用户名称
 * @param {string} data.startTime - 创建开始时间
 * @param {string} data.endTime - 创建结束时间
 * @param {string} data.status - 状态
 * @returns {promises} 分页用户对象
 */
export function getUserPage (data) {
  return request({
    url: '/user/page',
    method: 'post',
    data: {
      pageNum: data.pageNum,
      pageSize: data.pageSize,
      avatar: data.avatar,
      nickname: data.nickname,
      username: data.username,
      startTime: data.createTimeStartAndEnd ? data.createTimeStartAndEnd[0] : null,
      endTime: data.createTimeStartAndEnd ? data.createTimeStartAndEnd[1] : null,
      status: data.status
    }
  })
}
/**
 * 给用户添加角色
 * 
 * 传入用户code和角色code封装好的对象
 * 
 * 返回成功或失败提示
 * 
 * @param {Object} data - 封装好的对象
 * @param {string} data.roleCode - 角色code
 * @param {string} data.userId - 用户id
 * @returns {promises} 成功或失败的提示
 */
export function addUserRole (data) {
  return request({
    url: '/user/role2User/add',
    method: 'post',
    data: {
      roleCode: data.roleCode,
      userId: data.id
    }
  })
}
/**
 * 从用户删除角色
 * 
 * 传入用户code和角色code封装好的对象
 * 
 * 返回成功或失败提示
 * 
 * @param {Object} data - 封装好的对象
 * @param {string} data.roleCode - 角色code
 * @param {string} data.userId - 用户id
 * @returns {promises} 成功或失败的提示
 */
export function deleteUserRole (data) {
  return request({
    url: '/user/role2User/delete',
    method: 'delete',
    data: {
      roleCode: data.roleCode,
      userId: data.id
    }
  })
}
/**
 * 封禁用户，实际上就是修改状态（1启用5封禁）
 * 
 * 封装用户id和用户状态为一个对象传入
 * 
 * 返回结果为修改成功或失败的提示
 * 
 * @param {object} data - 封装好的对象
 * @param {string} data.id - 用户id
 * @param {string} data.status - 用户状态
 * @returns {promises} 修改成功或失败的提示
 */
export function banUser (data) {
  return request({
    url: '/user/ban',
    method: 'put',
    data: {
      id: data.id,
      status: data.status
    }
  })
}